package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import org.apache.ibatis.annotations.Param;
import zipkin2.Call;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 内部调用使用的一些方法的接口类
 */
public interface ItemService {

    /**
     * 查询sku的基本信息和图片信息
     * @param skuId
     * @return
     */
    public SkuInfo getSkuInfo(Long skuId);

    /**
     * 查询sku的基本信息和图片信息,优先从redis中获取，若redis中没有，
     * 从数据库与中获取，并将查询出来的数据缓存在redis中
     * @param skuId
     * @return
     */
    public SkuInfo getSkuInfoDBOrRedis(Long skuId);

    /**
     * 第二种方案
     * @param skuId
     * @return
     */
    public SkuInfo getSkuInfoFromDBOrRedisRedission(Long skuId);
    /**
     * 根据3级分类查询一级二级三级分类的详细信息
     * @param cId
     * @return
     */
    public BaseCategoryView getCategory(Long cId);

    /**
     * 获取商品的价格
     * @param skuId
     * @return
     */
    public BigDecimal getPrice(Long skuId);

    /**
     * 通过skuid和spuid查询当前商品的销售属性和当前spu的所有的销售属性
     * @param skuId
     * @param spuId
     * @return
     */
    List<SpuSaleAttr> getSaleAttrBySpuAndSku(Long skuId, Long spuId);

    /**
     * 根据spuid查询出该spu下所有的sku与销售属性值的对应关系
     * @param spuId
     * @return
     */
    public Map getSkuSaleAttrListBySpuId(Long spuId);

    /**
     *查询首页的所有的分类信息
     * @return
     */
    public List<JSONObject> getCategoryInfoList();

    /**
     * 查询品牌信息详情
     * @return
     */
    public BaseTrademark getById(Long id);
    /**
     * 根据sku的id查询平台属性信息
     * @param skuId
     * @return
     */
    public List<BaseAttrInfo> selectBaseAttrInfoBySku(Long skuId);
 }
